package config

import (
	"ddl_checker/pkg/utils"
)

// GlobalConfig 全局配置实例
var GlobalConfig *utils.Config

// InitGlobalConfig 初始化全局配置
func InitGlobalConfig() error {
	GlobalConfig = utils.NewConfig()
	return GlobalConfig.Load()
}

// InitGlobalConfigWithPath 使用指定路径初始化全局配置
func InitGlobalConfigWithPath(envPath string) error {
	GlobalConfig = utils.NewConfigWithPath(envPath)
	return GlobalConfig.Load()
}

// GetGlobalConfig 获取全局配置实例
func GetGlobalConfig() *utils.Config {
	if GlobalConfig == nil {
		// 如果全局配置未初始化，自动初始化
		if err := InitGlobalConfig(); err != nil {
			// 初始化失败时创建一个空配置
			GlobalConfig = utils.NewConfig()
		}
	}
	return GlobalConfig
}

// 全局配置访问函数，为了向后兼容和易用性

// GetString 获取字符串配置值
func GetString(key string, defaultValue string) string {
	return GetGlobalConfig().GetString(key, defaultValue)
}

// GetInt 获取整数配置值
func GetInt(key string, defaultValue int) int {
	return GetGlobalConfig().GetInt(key, defaultValue)
}

// GetBool 获取布尔配置值
func GetBool(key string, defaultValue bool) bool {
	return GetGlobalConfig().GetBool(key, defaultValue)
}

// GetDuration 获取时间配置值
func GetDuration(key string, defaultValue interface{}) interface{} {
	// 为了向后兼容，支持 interface{} 类型
	switch v := defaultValue.(type) {
	case int:
		return GetGlobalConfig().GetInt(key, v)
	case bool:
		return GetGlobalConfig().GetBool(key, v)
	case string:
		return GetGlobalConfig().GetString(key, v)
	case float64:
		return GetGlobalConfig().GetInt(key, int(v))
	default:
		return defaultValue
	}
}
